home *** CD-ROM | disk | FTP | other *** search
- // LifeMain.c
- // Entry point for Mike's Life.
- // Copyright ©1995 Michael D. Crawford. All Rights Reserved.
- // 11 Jun 95 Mike Crawford crawford@scruznet.com
- //
- // Revision History:
- // 11 Jun 95 MDC New today
-
- #include <QDOffscreen.h>
- #include "LifeAuthors.h"
- #include "LifeMain.h"
- #include "LifeMenus.h"
- #include "Control.h"
- #include "LifeModules.h"
-
- void InitManagers( void );
- void EventLoop( void );
- void DoNullEvent( void );
- void DoMouseDown( EventRecord *evtPtr );
- void DoKeyDown( EventRecord *evtPtr );
- void DoUpdate( EventRecord *evtPtr );
- void DoActivate( EventRecord *evtPtr );
- void DoContentClick( WindowPtr winPtr, Point globalPt );
-
- static Boolean gTimeToQuit;
- static unsigned long gSleepTime;
-
- void main( void )
- {
- OSErr err;
-
- InitManagers();
-
- err = SetupMenus();
- if ( err ){
- ExitToShell();
- }
-
- InitControl();
-
- err = InitModules();
- if ( err )
- return;
-
- gTimeToQuit = false;
- gSleepTime = 0;
-
- InitCursor();
-
- EventLoop();
-
- return;
- }
-
- void EventLoop( void )
- {
- EventRecord evt;
-
- do {
- WaitNextEvent( everyEvent, &evt, gSleepTime, (RgnHandle)NULL );
-
- switch( evt.what ){
- case nullEvent:
- DoNullEvent();
- break;
- case mouseDown:
- DoMouseDown( &evt );
- break;
- case mouseUp:
- break;
- case keyDown:
- case autoKey:
- DoKeyDown( &evt );
- break;
- case keyUp:
- break;
- case updateEvt:
- DoUpdate( &evt );
- break;
- case diskEvt:
- break;
- case activateEvt:
- DoActivate( &evt );
- break;
- case osEvt:
- break;
- default:
- break;
- }
- }while ( !gTimeToQuit );
-
- return;
- }
-
- void DoNullEvent( void )
- {
- DoLifeNull();
-
- return;
- }
-
- void DoMouseDown( EventRecord *evtPtr )
- {
- short where;
- WindowPtr winPtr;
- long menuCode;
- Rect dragRect;
- RgnHandle grayRgn;
-
- where = FindWindow( evtPtr->where, &winPtr );
-
- switch( where ){
- case inDesk:
- break;
- case inMenuBar:
- AdjustMenus();
- menuCode = MenuSelect( evtPtr->where );
- DoMenuChoice( menuCode );
- break;
- case inSysWindow:
- break;
- case inContent:
- DoContentClick( winPtr, evtPtr->where );
- break;
- case inDrag:
- grayRgn = GetGrayRgn();
- dragRect = (*grayRgn)->rgnBBox;
- DragWindow( winPtr, evtPtr->where, &dragRect );
- break;
- case inGrow:
- break;
- case inGoAway:
- if ( TrackGoAway( winPtr, evtPtr->where ) )
- DoCloseWindow();
- break;
- case inZoomIn:
- break;
- case inZoomOut:
- break;
- }
-
- return;
- }
-
- void DoKeyDown( EventRecord *evtPtr )
- {
- char theChar;
- short isCmd;
- long menuCode;
-
- theChar = evtPtr->message & charCodeMask;
-
- isCmd = evtPtr->modifiers & cmdKey;
-
- if ( isCmd ){
- AdjustMenus(); // So grayed out items won't show up in MenuKey
-
- menuCode = MenuKey( theChar );
-
- DoMenuChoice( menuCode );
- }
-
- return;
- }
-
- void DoContentClick( WindowPtr winPtr, Point globalPt )
- {
- tLifeWorldPtr worldPtr;
- Point localPt;
-
- SetPort( winPtr );
- localPt = globalPt;
- GlobalToLocal( &localPt );
-
- worldPtr = WinToLifeWorld( winPtr );
- if ( !worldPtr )
- return;
-
- // Locate the part of the window that we have clicked in
- // STUB I'd like to have a toolbar.
- // STUB Check for scroll bar click
- // STUB and also translate into lifeworld coordinates
- // STUB allow drawing by dragging, and autoscrolling... gets complicated.
-
- ToggleCell( worldPtr, (long)localPt.h, (long)localPt.v );
- DrawCell( winPtr, worldPtr, (long)localPt.h, (long)localPt.v );
- return;
- }
-
- void DoUpdate( EventRecord *evtPtr )
- {
- WindowPtr win;
-
- win = (WindowPtr)( evtPtr->message );
-
- BeginUpdate( win );
-
- // Draw the window STUB
-
- EndUpdate( win );
-
- return;
- }
-
- void DoActivate( EventRecord *evtPtr )
- {
- return;
- }
-
- void TimeToQuit( void )
- {
- gTimeToQuit = true;
-
- return;
- }
-
- void InitManagers( void )
- {
- InitGraf( &qd.thePort );
- InitWindows();
- InitFonts();
- InitDialogs( (long)NULL );
-
- return;
- }
-
-